package part15;

import java.util.ArrayList;
import java.util.List;

/**
 * @author wcj
 * @Date 2021/5/30 16:11
 * @Version 1.0
 */
public class Part1524 {

    public static void main(String[] args) {
        Fruit[] fruit = new Apple[10];
        fruit[0] = new Apple();
        fruit[1] = new Jonathan();
        // 注意这个数组的运行时类型为Apple，因此其只能存放Apple和其子类型
        // 存放其它类型都会发生运行时异常即ArrayStoreException,不在编译器间抛出是因为
        // 编译期类型为fruit
//        fruit[2] = new Fruit();
//        fruit[3] = new Orange();

        // 这种转换也是错误的，因为我们关注的是容器的类型而不是容器持有的类型
//        List<Fruit> apples = new ArrayList<Apple>();
//        apples.add(new Apple());
//        apples.add(new Jonathan());
//        apples.add(new Fruit());
//        apples.add(new Orange());
//        for (Fruit apple : apples) {
//            System.out.println(apple);
//        }

        // 无法对其中添加元素，注意通配符表明的是一种不确定的具体类型，即我们无法得知具体类型是什么，因此也就无法往其中添加元素
        List<? extends Fruit> apples = new ArrayList<Apple>();
//        apples.add(new Apple());
//        apples.add(new Fruit());
//        apples.add(new Orange());
    }
}

class Fruit {
}

class Apple extends Fruit {
}

class Jonathan extends Apple {
}

class Orange extends Fruit {
}
